/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  dev
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    object      blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1.0;

rHub            0.02;   // Radius of the rotor hub
rRotorTip       0.05;   // Radius of the rotor blade tips
rMid            0.06;   // Radius of the midpoint between rotor and stator
rStatorTip      0.07;   // Radius of the stator blade tips
rVessel         0.1;    // Radius of the outer vessel wall

halfDepth       0.005;  // Half-depth of the 2-D slab

nCellsRootTip   12;     // Number of cells radially along the blades
nCellsMid       4;      // Number of cells radially across the mid section (/2)
nCellsBladeBlade 12;    // Number of cells tangentially between blades (/2)

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

vertices #codeStream
{
    codeInclude
    #{
        #include "pointField.H"
        #include "transformField.H"
    #};

    code
    #{
        const pointField points0
        ({
            point(-$rVessel,    0, -$halfDepth),
            point(-$rVessel,    0, -$halfDepth),
            point(-$rStatorTip, 0, -$halfDepth),
            point(-$rMid,       0, -$halfDepth),
            point(-$rRotorTip,  0, -$halfDepth),
            point(-$rHub,       0, -$halfDepth),
            point(-$rHub,       0, -$halfDepth),
        });

        pointField points;
        for (label i = 0; i < 8; i++)
        {
            points.append(transform(Rz(degToRad(i*45)), points0));
        }
        points.append(points + vector(0, 0, 2*$halfDepth));

        os  << points;
    #};
};

bladeBlock ($nCellsBladeBlade $nCellsRootTip 1) simpleGrading (1 1 1);
midBlock ($nCellsBladeBlade $nCellsMid 1) simpleGrading (1 1 1);

blocks
(
    hex (0 8 9 2 56 64 65 58) stator $bladeBlock
    hex (2 9 10 3 58 65 66 59) stator $midBlock
    hex (3 10 11 4 59 66 67 60) rotor $midBlock
    hex (4 11 12 5 60 67 68 61) rotor $bladeBlock

    hex (7 14 16 9 63 70 72 65) stator $bladeBlock
    hex (9 16 17 10 65 72 73 66) stator $midBlock
    hex (10 17 18 11 66 73 74 67) rotor $midBlock
    hex (11 18 20 12 67 74 76 68) rotor $bladeBlock

    hex (14 22 23 16 70 78 79 72) stator $bladeBlock
    hex (16 23 24 17 72 79 80 73) stator $midBlock
    hex (17 24 25 18 73 80 81 74) rotor $midBlock
    hex (18 25 26 19 74 81 82 75) rotor $bladeBlock

    hex (21 28 30 23 77 84 86 79) stator $bladeBlock
    hex (23 30 31 24 79 86 87 80) stator $midBlock
    hex (24 31 32 25 80 87 88 81) rotor $midBlock
    hex (25 32 34 26 81 88 90 82) rotor $bladeBlock

    hex (28 36 37 30 84 92 93 86) stator $bladeBlock
    hex (30 37 38 31 86 93 94 87) stator $midBlock
    hex (31 38 39 32 87 94 95 88) rotor $midBlock
    hex (32 39 40 33 88 95 96 89) rotor $bladeBlock

    hex (35 42 44 37 91 98 100 93) stator $bladeBlock
    hex (37 44 45 38 93 100 101 94) stator $midBlock
    hex (38 45 46 39 94 101 102 95) rotor $midBlock
    hex (39 46 48 40 95 102 104 96) rotor $bladeBlock

    hex (42 50 51 44 98 106 107 100) stator $bladeBlock
    hex (44 51 52 45 100 107 108 101) stator $midBlock
    hex (45 52 53 46 101 108 109 102) rotor $midBlock
    hex (46 53 54 47 102 109 110 103) rotor $bladeBlock

    hex (49 0 2 51 105 56 58 107) stator $bladeBlock
    hex (51 2 3 52 107 58 59 108) stator $midBlock
    hex (52 3 4 53 108 59 60 109) rotor $midBlock
    hex (53 4 6 54 109 60 62 110) rotor $bladeBlock
);

arc 45 (0 0 1);

edges
(
    arc 0 8 $arc
    arc 7 14 $arc
    arc 14 22 $arc
    arc 21 28 $arc
    arc 28 36 $arc
    arc 35 42 $arc
    arc 42 50 $arc
    arc 49 0 $arc
    arc 56 64 $arc
    arc 63 70 $arc
    arc 70 78 $arc
    arc 77 84 $arc
    arc 84 92 $arc
    arc 91 98 $arc
    arc 98 106 $arc
    arc 105 56 $arc

    arc 2 9 $arc
    arc 9 16 $arc
    arc 16 23 $arc
    arc 23 30 $arc
    arc 30 37 $arc
    arc 37 44 $arc
    arc 44 51 $arc
    arc 51 2 $arc
    arc 58 65 $arc
    arc 65 72 $arc
    arc 72 79 $arc
    arc 79 86 $arc
    arc 86 93 $arc
    arc 93 100 $arc
    arc 100 107 $arc
    arc 107 58 $arc

    arc 3 10 $arc
    arc 10 17 $arc
    arc 17 24 $arc
    arc 24 31 $arc
    arc 31 38 $arc
    arc 38 45 $arc
    arc 45 52 $arc
    arc 52 3 $arc
    arc 59 66 $arc
    arc 66 73 $arc
    arc 73 80 $arc
    arc 80 87 $arc
    arc 87 94 $arc
    arc 94 101 $arc
    arc 101 108 $arc
    arc 108 59 $arc

    arc 4 11 $arc
    arc 11 18 $arc
    arc 18 25 $arc
    arc 25 32 $arc
    arc 32 39 $arc
    arc 39 46 $arc
    arc 46 53 $arc
    arc 53 4 $arc
    arc 60 67 $arc
    arc 67 74 $arc
    arc 74 81 $arc
    arc 81 88 $arc
    arc 88 95 $arc
    arc 95 102 $arc
    arc 102 109 $arc
    arc 109 60 $arc

    arc 5 12 $arc
    arc 12 20 $arc
    arc 19 26 $arc
    arc 26 34 $arc
    arc 33 40 $arc
    arc 40 48 $arc
    arc 47 54 $arc
    arc 54 6 $arc
    arc 61 68 $arc
    arc 68 76 $arc
    arc 75 82 $arc
    arc 82 90 $arc
    arc 89 96 $arc
    arc 96 104 $arc
    arc 103 110 $arc
    arc 110 62 $arc
);

defaultPatch
{
    name walls;
    type wall;
}

boundary
(
    rotor
    {
        type wall;
        faces
        (
            (5 61 68 12)
            (12 68 76 20)
            (19 75 82 26)
            (26 82 90 34)
            (33 89 96 40)
            (40 96 104 48)
            (47 103 110 54)
            (54 110 62 6)

            (4 60 62 6)
            (18 74 76 20)
            (32 88 90 34)
            (46 102 104 48)
            (4 5 61 60)
            (18 19 75 74)
            (32 33 89 88)
            (46 47 103 102)
        );
    }
    stator
    {
        type wall;
        faces
        (
            (0 8 64 56)
            (7 14 70 63)
            (14 22 78 70)
            (21 28 84 77)
            (28 36 92 84)
            (35 42 98 91)
            (42 50 106 98)
            (49 0 56 105)

            (8 64 65 9)
            (22 78 79 23)
            (36 92 93 37)
            (50 106 107 51)
            (7 9 65 63)
            (21 23 79 77)
            (35 37 93 91)
            (49 51 107 105)
        );
    }
    front
    {
        type empty;
        faces
        (
            (56 58 65 64)
            (63 65 72 70)
            (70 72 79 78)
            (77 79 86 84)
            (84 86 93 92)
            (91 93 100 98)
            (98 100 107 106)
            (105 107 58 56)

            (58 59 66 65)
            (65 66 73 72)
            (72 73 80 79)
            (79 80 87 86)
            (86 87 94 93)
            (93 94 101 100)
            (100 101 108 107)
            (107 108 59 58)

            (59 60 67 66)
            (66 67 74 73)
            (73 74 81 80)
            (80 81 88 87)
            (87 88 95 94)
            (94 95 102 101)
            (101 102 109 108)
            (108 109 60 59)

            (60 61 68 67)
            (67 68 76 74)
            (74 75 82 81)
            (81 82 90 88)
            (88 89 96 95)
            (95 96 104 102)
            (102 103 110 109)
            (109 110 62 60)
        );
    }
    back
    {
        type empty;
        faces
        (
            (0 2 9 8)
            (7 9 16 14)
            (14 16 23 22)
            (21 23 30 28)
            (28 30 37 36)
            (35 37 44 42)
            (42 44 51 50)
            (49 51 2 0)

            (2 3 10 9)
            (9 10 17 16)
            (16 17 24 23)
            (23 24 31 30)
            (30 31 38 37)
            (37 38 45 44)
            (44 45 52 51)
            (51 52 3 2)

            (3 4 11 10)
            (10 11 18 17)
            (17 18 25 24)
            (24 25 32 31)
            (31 32 39 38)
            (38 39 46 45)
            (45 46 53 52)
            (52 53 4 3)

            (4 5 12 11)
            (11 12 20 18)
            (18 19 26 25)
            (25 26 34 32)
            (32 33 40 39)
            (39 40 48 46)
            (46 47 54 53)
            (53 54 6 4)
        );
    }
);


// ************************************************************************* //
